package metamodel.coreservices;

import metamodel.FlatProperty;

import java.util.Date;

/**
 * Has default mappings for certain built-in classes. If no PROPERTY_MAPPING is avail null is returned.
 */
public class DefaultStringMapper implements StringMapper {
    public String toString(FlatProperty descriptor, Object value) {
        if (value == null)
            return "null";
        if (
                (descriptor.getDescriptor().getPropertyType() == Integer.class) |
                        (descriptor.getDescriptor().getPropertyType() == int.class) |
                        (descriptor.getDescriptor().getPropertyType() == long.class) |
                        (descriptor.getDescriptor().getPropertyType() == Long.class)) {
            return value.toString();
        }
        if (descriptor.getDescriptor().getPropertyType() == Date.class) {
            return Long.toString(((Date) value).getTime());
        }
        if ((descriptor.getDescriptor().getPropertyType() == String.class)) {
            return value.toString().replaceAll("\"", "\\\\\"");
        }
        return null;

    }

    public Object toObject(FlatProperty descriptor, String value) {
        if (descriptor.getDescriptor().getPropertyType() == String.class) {
            return value;
        }
        if (descriptor.getDescriptor().getPropertyType() == Date.class) {
            return new Date(Long.parseLong(value));
        }

        if (descriptor.getDescriptor().getPropertyType() == Integer.class) {
            return new Integer(value);
        }

        if (descriptor.getDescriptor().getPropertyType() == int.class) {
            return new Integer(value);
        }


        if (descriptor.getDescriptor().getPropertyType() == long.class) {
            return new Long(value);
        }
        if (descriptor.getDescriptor().getPropertyType() == Long.class) {
            return new Long(value);
        }


        return null;
    }

}
